package com.example.managemyself.util;

import android.content.Context;
import android.content.SharedPreferences;
import android.util.Log;

import com.example.managemyself.data.database.AppDatabase;
import com.example.managemyself.data.model.User;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 数据清除管理器
 * 负责清除用户的所有数据，包括数据库数据和SharedPreferences数据
 */
public class DataClearManager {
    
    private static final String TAG = "DataClearManager";
    
    private final Context context;
    private final AppDatabase database;
    private final ExecutorService executor;
    
    public DataClearManager(Context context) {
        this.context = context.getApplicationContext();
        this.database = AppDatabase.getInstance(context);
        this.executor = Executors.newSingleThreadExecutor();
    }
    
    /**
     * 清除指定用户的所有数据
     */
    public void clearUserData(int userId, DataClearCallback callback) {
        executor.execute(() -> {
            try {
                Log.d(TAG, "开始清除用户数据: " + userId);
                
                // 1. 清除数据库中的用户相关数据
                clearDatabaseData(userId);
                
                // 2. 清除SharedPreferences中的用户数据
                clearSharedPreferencesData(userId);
                
                // 3. 清除天气缓存
                clearWeatherCache();
                
                // 4. 清除AI聊天历史
                clearAIChatHistory(userId);
                
                Log.d(TAG, "用户数据清除完成: " + userId);
                
                if (callback != null) {
                    callback.onSuccess();
                }
                
            } catch (Exception e) {
                Log.e(TAG, "清除用户数据失败", e);
                if (callback != null) {
                    callback.onError("清除数据失败: " + e.getMessage());
                }
            }
        });
    }
    
    /**
     * 清除当前用户的所有数据
     */
    public void clearCurrentUserData(DataClearCallback callback) {
        User currentUser = UserManager.getInstance().getCurrentUser();
        if (currentUser != null) {
            clearUserData(currentUser.getId(), callback);
        } else {
            if (callback != null) {
                callback.onError("当前没有登录用户");
            }
        }
    }
    
    /**
     * 清除数据库中的用户相关数据
     */
    private void clearDatabaseData(int userId) throws Exception {
        Log.d(TAG, "清除数据库数据...");
        
        // 由于当前数据模型没有userId字段，暂时清除所有数据
        // TODO: 未来版本中添加userId字段后，可以按用户清除
        
        // 清除所有任务数据
        database.clearAllTables();
        Log.d(TAG, "已清除所有数据表");
        
        // 重新创建用户（保留用户账户）
        User currentUser = UserManager.getInstance().getCurrentUser();
        if (currentUser != null) {
            database.userDao().insertUser(currentUser);
            Log.d(TAG, "已重新创建用户记录");
        }
    }
    
    /**
     * 清除SharedPreferences中的用户数据
     */
    private void clearSharedPreferencesData(int userId) {
        Log.d(TAG, "清除SharedPreferences数据...");
        
        // 清除用户资料缓存
        SharedPreferences profilePrefs = context.getSharedPreferences("user_profile", Context.MODE_PRIVATE);
        SharedPreferences.Editor profileEditor = profilePrefs.edit();
        
        // 清除该用户的所有资料缓存
        profileEditor.remove("phone_" + userId);
        profileEditor.remove("birthday_" + userId);
        profileEditor.remove("gender_" + userId);
        profileEditor.remove("bio_" + userId);
        profileEditor.remove("constellation_" + userId);
        profileEditor.remove("hobbies_" + userId);
        profileEditor.remove("occupation_" + userId);
        profileEditor.remove("city_" + userId);
        profileEditor.remove("public_birthday_" + userId);
        profileEditor.remove("public_contact_" + userId);
        profileEditor.remove("avatar_" + userId);
        
        profileEditor.apply();
        
        // 清除用户设置缓存
        SharedPreferences settingsPrefs = context.getSharedPreferences("user_settings_" + userId, Context.MODE_PRIVATE);
        settingsPrefs.edit().clear().apply();
        
        // 清除番茄钟数据
        SharedPreferences pomodoroPrefs = context.getSharedPreferences("pomodoro_" + userId, Context.MODE_PRIVATE);
        pomodoroPrefs.edit().clear().apply();
        
        Log.d(TAG, "SharedPreferences数据清除完成");
    }
    
    /**
     * 清除天气缓存
     */
    private void clearWeatherCache() {
        Log.d(TAG, "清除天气缓存...");
        WeatherCacheManager weatherCache = WeatherCacheManager.getInstance(context);
        weatherCache.clearCache();
    }
    
    /**
     * 清除AI聊天历史
     */
    private void clearAIChatHistory(int userId) {
        Log.d(TAG, "清除AI聊天历史...");
        try {
            ChatHistoryManager chatHistory = new ChatHistoryManager(context);
            chatHistory.clearAllHistory();
        } catch (Exception e) {
            Log.w(TAG, "清除AI聊天历史失败", e);
        }
    }
    
    /**
     * 数据清除回调接口
     */
    public interface DataClearCallback {
        void onSuccess();
        void onError(String error);
    }
    
    /**
     * 释放资源
     */
    public void release() {
        if (executor != null && !executor.isShutdown()) {
            executor.shutdown();
        }
    }
} 